// 用于存储 context 值的对象
const contextMap = new WeakMap();

export function createContext(defaultValue) {
    const context = {
        _currentValue: defaultValue,
        Provider: function Provider({ value, children }) {
            // 保存值到 context 对象中
            context._currentValue = value;
            // 将值存入 map
            contextMap.set(context, value);
            return children;
        },
        Consumer: function Consumer({ children }) {
            const value = contextMap.get(context) || context._currentValue;
            return children(value);
        }
    };

    return context;
}

export function useContext(context) {
    // 优先从 map 中获取值，如果没有则使用 _currentValue
    const value = contextMap.get(context) || context._currentValue;

    if (value === undefined) {
        console.warn('No value found for this context');
        return context._currentValue;
    }

    return value;
}

// 使用示例：
/*
// 1. 创建 context
const MyContext = createContext('default value');

// 2. 在父组件中使用 Provider
function Parent() {
    return (
        <MyContext.Provider value="some value">
            <Child />
        </MyContext.Provider>
    );
}

// 3. 在子组件中使用 useContext
function Child() {
    const value = useContext(MyContext);
    return <div>{value}</div>;
}
*/

